home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
linklist
/
source.lha
/
example.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-08
|
3KB
|
148 lines
#include <stdio.h>
#include "list.h"
typedef struct rapport {
char title[30];
char author[15];
int date;
} Rapport;
int rapSz = sizeof(Rapport);
static void insRap(), prRapAll(), prRap();
static int search(), compare();
main()
{
int id, code, search_date;
Rapport rap;
id = lDef(lSINGLY, lCHAIN);
insRap(id, lFIRST, 1, "Book 1", "People", 890129);
insRap(id, lFIRST, 2, "Book 2", "More People", 890130);
insRap(id, lLAST, 1, "Book 3", "Lots of People", 890131);
fprintf(stdout, "lGetNode\n");
prRapAll(id);
fprintf(stdout, "lGetIndxNode\n");
code = lGetIndxNode(id, 4, &rap, rapSz);
prRap(code, &rap);
code = lGetIndxNode(id, 2, &rap, rapSz);
prRap(code, &rap);
code = lGetIndxNode(id, -1, &rap, rapSz);
prRap(code, &rap);
code = lGetIndxNode(id, 3, &rap, rapSz);
prRap(code, &rap);
fprintf(stdout, "lFndNode\n");
search_date = 890129;
code = lFndNode(id, lFIRST, search, &search_date, &rap, rapSz);
prRap(code, &rap);
code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
prRap(code, &rap);
code = lFndNode(id, lNEXT, search, &search_date, &rap, rapSz);
prRap(code, &rap);
code = lDump(id, "dump");
fprintf(stdout, "lDump : %d\n", code);
lDel(id);
id = lUndump("dump");
fprintf(stdout, "lUndump : %d\n", id);
insRap(id, lFIRST, 4, "Book 4", "The Author", 891127);
prRapAll(id);
fprintf(stdout, "lFndFlagNode\n");
code = lFndFlagNode(id, lFIRST, 1, &rap, rapSz);
prRap(code, &rap);
code = lFndFlagNode(id, lNEXT, 1, &rap, rapSz);
prRap(code, &rap);
code = lFndFlagNode(id, lFIRST, 2, &rap, rapSz);
prRap(code, &rap);
code = lFndFlagNode(id, lFIRST, 7, &rap, rapSz);
prRap(code, &rap);
fprintf(stdout, "Untouched list\n");
prRapAll(id);
fprintf(stdout, "lSort\n");
lSort(id, lDESCENDING, lBUBBLE, compare);
prRapAll(id);
fprintf(stdout, "lSort\n");
lSort(id, lASCENDING, lHEAP, compare);
prRapAll(id);
lDelAll();
}
static void
insRap(id, where, flag, title, author, date)
int id, where, flag, date;
char *title, *author;
{
int code;
Rapport rap;
strcpy(rap.title, title);
strcpy(rap.author, author);
rap.date = date;
code = lInsNode(id, where, &rap, rapSz, flag);
}
static void
prRapAll(id)
int id;
{
int code;
Rapport rap;
code = lGetNode(id, lFIRST, &rap, rapSz);
prRap(code, &rap);
while (code == lFIRST || code == lSUCCESS || code == lLAST) {
code = lGetNode(id, lNEXT, &rap, rapSz);
prRap(code, &rap);
}
}
static void
prRap(code, rpprt)
int code;
Rapport *rpprt;
{
if (code >= 0)
fprintf(stdout, "Rapport : '%s' '%s' '%d'\n", rpprt->title,
rpprt->author, rpprt->date);
else
fprintf(stdout, "Return code = %d\n", code);
}
static int
search(date, rpprt)
int *date;
Rapport *rpprt;
{
if (rpprt->date > *date)
return(lFOUND);
else
return(lNOT_FOUND);
}
static int
compare(data1, data2)
Rapport *data1, *data2;
{
int k = strcmp(data1->author, data2->author);
if (k == 0)
return(lSAME); /* key1 == key2 */
else if (k > 0)
return(l2LT1); /* key1 > key2 */
else if (k < 0)
return(l1LT2); /* key1 < key2 */
}